Debezium PostgreSQL Trigger

Debezium PostgreSQL Trigger

Certified

Trigger a flow via a PostgreSQL change data capture event periodically and create one execution per batch

If you would like to consume each message from change data capture in real-time and create one execution per message, you can use the io.kestra.plugin.debezium.postgres.RealtimeTrigger instead.

yaml
type: io.kestra.plugin.debezium.postgres.Trigger

Consume a message from a PostgreSQL database via change data capture periodically.

yaml
id: pg_trigger
namespace: company.team

tasks:
  - id: log
    type: io.kestra.plugin.core.log.Log
    message: "{{ trigger.uris }}"

triggers:
  - id: trigger
    type: io.kestra.plugin.debezium.postgres.Trigger
    hostname: 127.0.0.1
    port: "5432"
    username: "{{ secret('PG_USERNAME') }}"
    password: "{{ secret('PG_PASSWORD') }}"
    maxRecords: 100
    database: my_database
    pluginName: PGOUTPUT
    snapshotMode: ALWAYS
Properties

The name of the PostgreSQL database from which to stream the changes

Hostname of the remote server

Port of the remote server

Defaultfalse

Specifies whether a trigger is allowed to start a new execution even if a previous run is still in progress.

DefaultADD_FIELD
Possible Values
ADD_FIELDNULLDROP

Specify how to handle deleted rows

Possible settings are:

  • ADD_FIELD: Add a deleted field as boolean.
  • NULL: Send a row with all values as null.
  • DROP: Don't send deleted row.
Defaultdeleted

The name of deleted field if deleted is ADD_FIELD

An optional, comma-separated list of regular expressions that match the fully-qualified names of columns to exclude from change event record values

Fully-qualified names for columns are of the form databaseName.tableName.columnName. Do not also specify the includedColumns connector configuration property.

An optional, comma-separated list of regular expressions that match the names of databases for which you do not want to capture changes

The connector captures changes in any database whose name is not in the excludedDatabases. Do not also set the includedDatabases connector configuration property.

An optional, comma-separated list of regular expressions that match fully-qualified table identifiers for tables whose changes you do not want to capture

The connector captures changes in any table not included in excludedTables. Each identifier is of the form databaseName.tableName. Do not also specify the includedTables connector configuration property.

DefaultINLINE
Possible Values
RAWINLINEWRAP

The format of the output

Possible settings are:

  • RAW: Send raw data from Debezium.
  • INLINE: Send a row like in the source with only data (remove after & before), all the columns will be present for each row.
  • WRAP: Send a row like INLINE but wrapped in a record field.
Defaulttrue

Ignore DDL statement

Ignore CREATE, ALTER, DROP and TRUNCATE operations.

An optional, comma-separated list of regular expressions that match the fully-qualified names of columns to include in change event record values

Fully-qualified names for columns are of the form databaseName.tableName.columnName. Do not also specify the excludedColumns connector configuration property.

An optional, comma-separated list of regular expressions that match the names of the databases for which to capture changes

The connector does not capture changes in any database whose name is not in includedDatabases. By default, the connector captures changes in all databases. Do not also set the excludedDatabases connector configuration property.

An optional, comma-separated list of regular expressions that match fully-qualified table identifiers of tables whose changes you want to capture

The connector does not capture changes in any table not included in includedTables. Each identifier is of the form databaseName.tableName. By default, the connector captures changes in every non-system table in each database whose changes are being captured. Do not also specify the excludedTables connector configuration property.

DefaultPT1M
Formatduration

Interval between polling.

The interval between 2 different polls of schedule, this can avoid to overload the remote system with too many calls. For most of the triggers that depend on external systems, a minimal interval must be at least PT30S. See ISO_8601 Durations for more information of available interval values.

DefaultADD_FIELD
Possible Values
ADD_FIELDDROP

Specify how to handle key

Possible settings are:

  • ADD_FIELD: Add key(s) merged with columns.
  • DROP: Drop keys.

The maximum duration waiting for new rows

It's not a hard limit and is evaluated every second. It is taken into account after the snapshot if any.

The maximum number of rows to fetch before stopping

It's not a hard limit and is evaluated every second.

DefaultPT1H

The maximum duration waiting for the snapshot to end

It's not a hard limit and is evaluated every second. The properties 'maxRecords', 'maxDuration' and 'maxWait' are evaluated only after the snapshot is done.

DefaultPT10S

The maximum total processing duration

It's not a hard limit and is evaluated every second. It is taken into account after the snapshot if any.

DefaultADD_FIELD
Possible Values
ADD_FIELDDROP

Specify how to handle metadata

Possible settings are:

  • ADD_FIELD: Add metadata in a column named metadata.
  • DROP: Drop metadata.
Defaultmetadata

The name of metadata field if metadata is ADD_FIELD

DefaultON_STOP
Possible Values
ON_EACH_BATCHON_STOP

When to commit the offsets to the KV Store

  • ON_EACH_BATCH: after each batch of records consumed by this trigger, the offsets will be stored in the KV Store. This avoids any duplicated records being consumed but can be costly if many events are produced.
  • ON_STOP: when this trigger is stopped or killed, the offsets will be stored in the KV Store. This avoids any un-necessary writes to the KV Store, but if the trigger is not stopped gracefully, the KV Store value may not be updated leading to duplicated records consumption.

Password on the remote server

DefaultPGOUTPUT
Possible Values
DECODERBUFSWAL2JSONWAL2JSON_RDSWAL2JSON_STREAMINGWAL2JSON_RDS_STREAMINGPGOUTPUT

The name of the PostgreSQL logical decoding plug-in installed on the PostgreSQL server

If you are using a wal2json plug-in and transactions are very large, the JSON batch event that contains all transaction changes might not fit into the hard-coded memory buffer, which has a size of 1 GB. In such cases, switch to a streaming plug-in, by setting the plugin-name property to wal2json_streaming or wal2json_rds_streaming. With a streaming plug-in, PostgreSQL sends the connector a separate message for each change in a transaction.

Additional configuration properties

Any additional configuration properties that is valid for the current driver.

Properties that make Debezium or the JDBC driver load arbitrary classes, or that move Debezium's offset and schema history storage, are rejected: connector.class, converters, transforms*, predicates*, post.processors*, config.providers*, *.converter*, topic.naming.strategy, sourceinfo.struct.maker, transaction.metadata.factory, offset.storage*, the schema.history.internal backend and its Kafka client settings, and class-loading or local-file JDBC parameters under database.* / driver.* (for example socketFactory, sslfactory, queryInterceptors, autoDeserialize, allowLoadLocalInfile).

Defaultkestra_publication

The name of the PostgreSQL publication created for streaming changes when using PGOUTPUT

This publication is created at start-up if it does not already exist and it includes all tables. Debezium then applies its own include/exclude list filtering, if configured, to limit the publication to change events for the specific tables of interest. The connector user must have superuser permissions to create this publication, so it is usually preferable to create the publication before starting the connector for the first time.

If the publication already exists, either for all tables or configured with a subset of tables, Debezium uses the publication as it is defined.

Defaultkestra

The name of the PostgreSQL logical decoding slot that was created for streaming changes from a particular plug-in for a particular database/schema

The server uses this slot to stream events to the Debezium connector that you are configuring. Slot names must conform to PostgreSQL replication slot naming rules, which state: "Each replication slot has a name, which can contain lower-case letters, numbers, and the underscore character."

DefaultINITIAL
Possible Values
INITIALALWAYSNEVERINITIAL_ONLY

Specifies the criteria for running a snapshot when the connector starts

Possible settings are:

  • INITIAL: The connector performs a snapshot only when no offsets have been recorded for the logical server name.
  • ALWAYS: The connector performs a snapshot each time the connector starts.
  • NEVER: The connector never performs snapshots. When a connector is configured this way, its behavior when it starts is as follows. If there is a previously stored LSN, the connector continues streaming changes from that position. If no LSN has been stored, the connector starts streaming changes from the point in time when the PostgreSQL logical replication slot was created on the server. The never snapshot mode is useful only when you know all data of interest is still reflected in the WAL.
  • INITIAL_ONLY: The connector performs an initial snapshot and then stops, without processing any subsequent changes.
DefaultTABLE
Possible Values
OFFDATABASETABLE

Split table on separate output uris

Possible settings are:

  • TABLE: This will split all rows by tables on output with name database.table
  • DATABASE: This will split all rows by databases on output with name database.
  • OFF: This will NOT split all rows resulting in a single data output.

The SSL certificate for the client

Must be a PEM encoded certificate.

The SSL private key of the client

Must be a PEM encoded key.

The password to access the client private key sslKey

DefaultDISABLE
Possible Values
DISABLEREQUIREVERIFY_CAVERIFY_FULL

SSL mode

Whether to use an encrypted connection to the PostgreSQL server. Options include:

  • DISABLE uses an unencrypted connection.
  • REQUIRE uses a secure (encrypted) connection, and fails if one cannot be established.
  • VERIFY_CA behaves like require but also verifies the server TLS certificate against the configured Certificate Authority (CA) certificates, or fails if no valid matching CA certificates are found.
  • VERIFY_FULL behaves like verify-ca but also verifies that the server certificate matches the host to which the connector is trying to connect.

See the PostgreSQL documentation for more information.

The root certificate(s) against which the server is validated

Must be a PEM encoded certificate.

Defaultdebezium-state

The name of the Debezium state file stored in the KV Store for that namespace

SubTypestring
Possible Values
CREATEDSUBMITTEDRUNNINGPAUSEDRESTARTEDKILLINGSUCCESSWARNINGFAILEDKILLEDCANCELLEDQUEUEDRETRYINGRETRIEDSKIPPEDBREAKPOINTRESUBMITTED

List of execution states after which a trigger should be stopped (a.k.a. disabled).

Username on the remote server

Defaulttrue

A condition that determines whether the trigger should run.

A Pebble expression evaluated at trigger time. The trigger fires only when the expression evaluates to a truthy value (true, a non-empty string, a non-zero number). Use this to gate trigger execution on dynamic runtime values such as execution labels, flow variables, or environment conditions.

The number of fetched rows

The KV Store key under which the combined Debezium state (offset + schema history) is stored

Both stateOffsetKey and stateHistoryKey point to the same combined entry written atomically. The entry holds a map with keys offsets and history so both states are always consistent.

SubTypestring

URI of the generated internal storage file